package telas.agenda;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import java.awt.SystemColor;
import javax.swing.ImageIcon;
import javax.swing.JTabbedPane;
import java.awt.Font;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;
import javax.swing.JComboBox;
import javax.swing.JEditorPane;
import javax.swing.JTextArea;

import telas.sistema.ListenerJTextField;
import javax.swing.DefaultComboBoxModel;

import modelo.Fachada;
import modelo.agenda.Agenda;

import controle.agenda.ControleAgenda;
import controle.agenda.ControleAgendaSwing;

public class TelaAgenda extends JFrame {

	private JPanel contentPane;
	private JTextField tfNomeDoContato;
	private JTable table;
	private JTextField tfNome;
	private JTextField tfTelFixo;
	private JTextField tfTelCelular;
	private JTextField tfCidade;
	private JComboBox cbxEstado;
	private JTextArea taDescricao;
	private JButton btnSalvarContato;
	private boolean novoContato = true;
	private AgendaTableModel model;
	private TableRowSorter<AgendaTableModel> sorter;
	private JButton btnEditarContato;
	private JTabbedPane tabbedPane;
	private JPanel pnlListarContatos;
	private JPanel pnlCadastraContato;
	private Agenda agendaSelecionado;
	private JButton btnExcluirContato;
	
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					TelaAgenda frame = new TelaAgenda();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public TelaAgenda() {
		super("Agenda");
		setResizable(false);
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setSize(800, 600);
		setVisible(true);
		setLocationRelativeTo(null);
		
		contentPane = new JPanel();
		contentPane.setBackground(SystemColor.controlHighlight);
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		tabbedPane = new JTabbedPane(JTabbedPane.TOP);
		tabbedPane.setBounds(0, 122, 794, 450);
		contentPane.add(tabbedPane);
		
		pnlListarContatos = new JPanel();
		pnlListarContatos.setBackground(SystemColor.controlHighlight);
		tabbedPane.addTab("Listar Contatos", null, pnlListarContatos, null);
		pnlListarContatos.setLayout(null);
		
		JLabel lblNomeDoContato = new JLabel("Nome do Contato");
		lblNomeDoContato.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblNomeDoContato.setBounds(12, 43, 115, 16);
		pnlListarContatos.add(lblNomeDoContato);
		
		tfNomeDoContato = new JTextField();
		tfNomeDoContato.setBounds(12, 59, 609, 20);
		pnlListarContatos.add(tfNomeDoContato);
		tfNomeDoContato.setColumns(10);
		
		JLabel lblPesquisarContatos = new JLabel("Pesquisar Contatos");
		lblPesquisarContatos.setFont(new Font("Tahoma", Font.BOLD, 18));
		lblPesquisarContatos.setBounds(12, 12, 352, 19);
		pnlListarContatos.add(lblPesquisarContatos);
		
		JButton btnPesquisar = new JButton("Pesquisar");
		btnPesquisar.setIcon(new ImageIcon(TelaAgenda.class.getResource("/telas/sistema/figuras/zoom.png")));
		btnPesquisar.setBounds(633, 56, 144, 26);
		pnlListarContatos.add(btnPesquisar);
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(12, 91, 765, 281);
		pnlListarContatos.add(scrollPane);
		
		
		model = new AgendaTableModel();
		sorter = new TableRowSorter<AgendaTableModel>(model);
		table = new JTable(model);
		table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		table.setBackground(SystemColor.info);
		table.setAutoCreateRowSorter(true);
		table.setRowSorter(sorter);
//		table.addKeyListener(new ControleFornecedorSwing(this, new ControleFornecedor()));
		table.setBackground(SystemColor.info);
		DefaultTableCellRenderer centralizado = new DefaultTableCellRenderer();  
		centralizado.setHorizontalAlignment(SwingConstants.CENTER); 
//				centralizado.setBackground(Color.RED);

		model.addListaDeAgenda(Fachada.getListAllAgenda());
		scrollPane.setViewportView(table);
//		table.setModel(new DefaultTableModel(
//			new Object[][] {
//				{null, null, null, null, null},
//				{null, null, null, null, null},
//				{null, null, null, null, null},
//				{null, null, null, null, null},
//				{null, null, null, null, null},
//				{null, null, null, null, null},
//				{null, null, null, null, null},
//				{null, null, null, null, null},
//				{null, null, null, null, null},
//				{null, null, null, null, null},
//				{null, null, null, null, null},
//				{null, null, null, null, null},
//				{null, null, null, null, null},
//				{null, null, null, null, null},
//				{null, null, null, null, null},
//				{null, null, null, null, null},
//				{null, null, null, null, null},
//				{null, null, null, null, null},
//				{null, null, null, null, null},
//				{null, null, null, null, null},
//				{null, null, null, null, null},
//				{null, null, null, null, null},
//			},
//			new String[] {
//				"Nome", "Tel. Fixo", "Tel. Celular", "Endere\u00E7o", "Descri\u00E7\u00E3o"
//			}
//		));
//		table.getColumnModel().getColumn(0).setPreferredWidth(204);
//		table.getColumnModel().getColumn(4).setPreferredWidth(205);
//		scrollPane.setViewportView(table);
		
		btnEditarContato = new JButton("Editar Contato");
		btnEditarContato.setIcon(new ImageIcon(TelaAgenda.class.getResource("/telas/sistema/figuras/page_edit.png")));
		btnEditarContato.setBounds(12, 384, 140, 26);
		btnEditarContato.addActionListener(new ControleAgendaSwing(this, new ControleAgenda()));
		pnlListarContatos.add(btnEditarContato);
		
		btnExcluirContato = new JButton("Excluir Contato");
		btnExcluirContato.setIcon(new ImageIcon(TelaAgenda.class.getResource("/telas/sistema/figuras/bullet_cross.png")));
		btnExcluirContato.setBounds(164, 384, 140, 26);
		btnExcluirContato.addActionListener(new ControleAgendaSwing(this, new ControleAgenda()));
		pnlListarContatos.add(btnExcluirContato);
		
		pnlCadastraContato = new JPanel();
		pnlCadastraContato.setBackground(SystemColor.controlHighlight);
		tabbedPane.addTab("Cadastrar Contato", null, pnlCadastraContato, null);
		pnlCadastraContato.setLayout(null);
		
		JLabel lblCadastrarDadosContato = new JLabel("Cadastrar Dados do Contato");
		lblCadastrarDadosContato.setFont(new Font("Tahoma", Font.BOLD, 18));
		lblCadastrarDadosContato.setBounds(12, 12, 383, 19);
		pnlCadastraContato.add(lblCadastrarDadosContato);
		
		JLabel lblNomeDoContato_1 = new JLabel("Nome do Contato");
		lblNomeDoContato_1.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblNomeDoContato_1.setBounds(12, 43, 115, 16);
		pnlCadastraContato.add(lblNomeDoContato_1);
		
		tfNome = new JTextField();
		tfNome.setColumns(10);
		tfNome.setBounds(12, 59, 483, 20);
		pnlCadastraContato.add(tfNome);

		JLabel lblTelFixo = new JLabel("Telefone Fixo");
		lblTelFixo.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblTelFixo.setBounds(12, 87, 115, 16);
		pnlCadastraContato.add(lblTelFixo);
		
		tfTelFixo = new JTextField();
		tfTelFixo.setColumns(10);
		tfTelFixo.setBounds(12, 103, 129, 20);
		pnlCadastraContato.add(tfTelFixo);
		
		JLabel lblTelefoneCelular = new JLabel("Telefone Celular");
		lblTelefoneCelular.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblTelefoneCelular.setBounds(153, 87, 115, 16);
		pnlCadastraContato.add(lblTelefoneCelular);
		
		tfTelCelular = new JTextField();
		tfTelCelular.setColumns(10);
		tfTelCelular.setBounds(153, 103, 129, 20);
		pnlCadastraContato.add(tfTelCelular);
		
		JLabel lblEstado = new JLabel("Estado");
		lblEstado.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblEstado.setBounds(302, 90, 51, 15);
		pnlCadastraContato.add(lblEstado);
		
		cbxEstado = new JComboBox();
		cbxEstado.setModel(new DefaultComboBoxModel(new String[] {"Acre - AC", "Alagoas - AL", "Amap\u00E1 - AP", "Amazonas - AM", "Bahia  - BA", "Cear\u00E1 - CE", "Distrito Federal  - DF", "Esp\u00EDrito Santo - ES", "Goi\u00E1s - GO", "Maranh\u00E3o - MA", "Mato Grosso - MT", "Mato Grosso do Sul - MS", "Minas Gerais - MG", "Par\u00E1 - PA", "Para\u00EDba - PB", "Paran\u00E1 - PR", "Pernambuco - PE", "Piau\u00ED - PI", "Rio de Janeiro - RJ", "Rio Grande do Norte - RN", "Rio Grande do Sul - RS", "Rond\u00F4nia - RO", "Roraima - RR", "Santa Catarina - SC", "S\u00E3o Paulo - SP", "Sergipe - SE", "Tocantins - TO"}));
		cbxEstado.setBounds(302, 103, 100, 20);
		pnlCadastraContato.add(cbxEstado);
		
		JLabel lblCidade = new JLabel("Cidade");
		lblCidade.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblCidade.setBounds(414, 91, 51, 15);
		pnlCadastraContato.add(lblCidade);
		
		tfCidade = new JTextField();
		tfCidade.setColumns(10);
		tfCidade.setBounds(414, 105, 155, 20);
		pnlCadastraContato.add(tfCidade);
		
		JLabel lblDescrio = new JLabel("Descri\u00E7\u00E3o");
		lblDescrio.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblDescrio.setBounds(12, 139, 115, 16);
		pnlCadastraContato.add(lblDescrio);
		
		taDescricao = new JTextArea();
		taDescricao.setBackground(SystemColor.info);
		taDescricao.setBounds(12, 156, 765, 126);
		pnlCadastraContato.add(taDescricao);
		
		btnSalvarContato = new JButton("Salvar Contato");
		btnSalvarContato.setIcon(new ImageIcon(TelaAgenda.class.getResource("/telas/sistema/figuras/disk.png")));
		btnSalvarContato.setBounds(12, 384, 140, 26);
		btnSalvarContato.addActionListener(new ControleAgendaSwing(this,new ControleAgenda()));
		pnlCadastraContato.add(btnSalvarContato);
		
		JButton btnLimparDados = new JButton("Limpar Dados");
		btnLimparDados.setIcon(new ImageIcon(TelaAgenda.class.getResource("/telas/sistema/figuras/bullet_page_white.png")));
		btnLimparDados.setBounds(164, 384, 140, 26);
		pnlCadastraContato.add(btnLimparDados);
		
		JLabel logo = new JLabel("");
		logo.setIcon(new ImageIcon(TelaAgenda.class.getResource("/telas/sistema/figuras/logo.com.fundo.png")));
		logo.setBounds(0, 0, 794, 144);
		contentPane.add(logo);
	}

	public JButton getBtnExcluirContato() {
		return btnExcluirContato;
	}

	public JPanel getContentPane() {
		return contentPane;
	}

	public JTextField getTfNomeDoContato() {
		return tfNomeDoContato;
	}

	public JTable getTable() {
		return table;
	}

	public JTextField getTfNome() {
		return tfNome;
	}

	public JTextField getTfTelFixo() {
		return tfTelFixo;
	}

	public JTextField getTfTelCelular() {
		return tfTelCelular;
	}

	public JTextField getTfCidade() {
		return tfCidade;
	}

	public JTabbedPane getTabbedPane() {
		return tabbedPane;
	}
	
	public JPanel getPnlListarContatos() {
		return pnlListarContatos;
	}

	public JPanel getPnlCadastrarAlterarContato() {
		return pnlCadastraContato;
	}
	

	public JButton getBtnSalvarContato() {
		return btnSalvarContato;
	}

	public boolean isNovoContato() {
		return novoContato;
	}

	public void setNovoContato(boolean novoContato) {
		this.novoContato = novoContato;
	}

	public JTextArea getTaDescricao() {
		return taDescricao;
	}
	
	public JComboBox getCbxEstado() {
		return cbxEstado;
	}

	public AgendaTableModel getModel() {
		return model;
	}

	public JButton getBtnEditarContato() {
		return btnEditarContato;
	}

	public void setAgendaSelecionado(Agenda agendaSelecionado) {
		this.agendaSelecionado = agendaSelecionado;
		this.tfNome.setText(agendaSelecionado.getNome());
		this.tfCidade.setText(agendaSelecionado.getEndereco().getCidade());
		this.tfTelCelular.setText(agendaSelecionado.getTelefoneCelular());
		this.tfTelFixo.setText(agendaSelecionado.getTelefoneFixo());
	}
	
	public JPanel getPanelAddEdit() {
		return pnlCadastraContato;
	}
	
	public Agenda getAgendaSelecionado() {
		return agendaSelecionado;
	}
	public void resetTela() {
		tfCidade.setText("");
		tfNome.setText("");
		tfTelCelular.setText("");
		tfTelFixo.setText("");

	}
	
}
